
package han.cirno.corrupt

/**
 * （谁会在这里写笔记啊淦）
 *
 * 1. 删除UserInfoData类，并将所有数据来源改为对应的SchoolDataSource
 *   (1) 在删除后，需要考虑数据如何储存
 *   (2) 储存的话。。。可以将UserInfoData替换为UserInfoData_
 *       之后再让SchoolDataProvider的实现对UserInfoData_进行修改和保存
 *       换言之，Client和其他原先对UserInfoData有访问权的类不再可以直接修改UserInfoData_
 *       转而，这些类可以访问SchoolDataProvider，进而通过SchoolDataProvider提供的接口
 *       来对数据进行访问。。。
 *       听起来还不错。。接下来考虑实现
 *   (3){Finished}首先，定义一个全局类，用来获取当前SchoolProvider的实现
 *     - 当然，这需要考虑当前用户的登录状态
 *     - 然后，可以根据用户的登录状态来判断给出哪个实现
 *     - 当然，也需要提供手动的实现选择，例如登录时
 *     - 实现上：需要明确第一次实例化实现时，需要读入相关数据
 *     - 这需要考虑数据的读取。。应该需要一个新的Data类
 *     - 这个类需要储存所有的信息，包括各个SchoolProvider实现的，以及全局的
 *     - 所以HashMap很合适
 *     - 各个SchoolProvider实现类保存一些自己的键
 *     - 在新的Data类里存放全局的键
 *     - 我将这个新的Data类命名为：UserSchoolData
 *   (4) 接着，将对UserInfoData的更改改为对SchoolProvider接口的调用
 *   (5)
 * 2. SchoolDataSource的名字不太好，改成SchoolProvider
 * @author CCirno
 */
/**
 * （是的，这是之后的规划）
 * 首先，我应该抛弃序列化的数据储存方法，转而使用Room的注入数据库。。。
 * 这是一次大重构，也是一个挑战。。
 * 下面是具体实现：
 * (1) 首先考虑旧数据的访问，我该如何访问（尤其是在主线程访问）数据
 *   i. 可能的设想：先读入所有数据，然后存入内存（旧类），仅在保存数据/软件刚开启时对数据库操作
 *      但是如果这么做的话，我又该如何处理当前（旧）的数据类，已知uid对它们来说没有必要
 *      算，不使用它们就行，在把内存中的内容存入数据库之前，我可能还要重新分配主键，为预防主键重复问题
 *      这样的话，我实际上是先删掉了原数据，而后重新生成了新数据——这对于课程表，考试来说没什么大问题
 *      但是对于用户的数据又如何呢，这里的主键可能需要随机生成了，用时间戳是个不错的选择，应该不会重复吧。。？
 *      （没有人会在创建一个新条目后把时间调回去然后刚刚好在那一毫秒创建一个新条目吧。。。）
 *      但是这么做需要考虑一次性创建多个条目的问题，如果一毫秒内创建了多个条目，，，情况就不太好了
 *      还是用Random.nextLong()吧。。。
 *      主键问题解决后，接下来是数据保存的问题
 *   ii.执行一次UserDataUtil.saveData()之后，我应该做什么，这是主要问题
 *      首先，上文提到了，对于课程表这类的数据，我可以删库之后重新添加
 *      对于用户登录信息，我需要谨慎处理（不处理就个屁），尽量使用另一种方式。。。
 *      就是Key,Value的表
 *      *展开*
 *      以UserSchoolData为例，我要做的就是储存里面的HashMap，将HashMap变成一堆Key,Value表项
 *      但是UserClassesData很麻烦，有一个嵌套结构，这可能需要把一个数据库剁成不同的表来解决这个问题。。
 *      我的数据库功底不是很足，还要学。。。
 * @author CCirno
 */
/**
 * 2025/4/6 23:56
 * @author CCirno
 * 今天把Dao的自动生成写好了，第一次尝试这么写，该说是有点不适应吗，我甚至感觉有点爽。。。
 * 继续写下去吧（清明节假期过的好快。。）
 * （真的有人来看这个日记吗？）（希望无）（这里都快成啥了）（自言自语吗？真恶心。。）
 * 困了，睡觉~ ヾ(≧▽≦*)o
 */
/**
 * 2025/05/12 10:47
 * @author CCirno
 * 现在开始着手准备更加细化的错误日志报告（例如在常规加载中记录日志，并在设置界面添加查看入口）
 * 当然还有伪动态主题，要实现这个，可能需要自动生成xml，而我还没学qwq
 * 以及更多的功能，例如FAFU本校的抢课和评教，难点在于在有限的时间内复刻出API
 * 先来解决伪动态主题的问题吧，我打算使用大量overlap来实现，为此，我需要创建多种theme.xml样式
 * 分别Overlap: colorPrimary, colorPrimary_dark, colorAccent, colorAccent_dark,
 * 当然还有根据对比度进行调整的colorOnPrimary和colorOnAccent
 * 背景也可以调整，例如overlap background 和 colorOnBackground，但是要注意在设置的时候不要太亮了
 * （好多东西好麻烦...——不过认了吧）
 */
/**
 * 2025/05/29 03:53
 * @author CCirno
 * 果然，把整个项目迁移到Compose是个痛苦的过程，不过会好看就可以啦~
 * 这次主要是解决了主题的问题，不需要使用Overlap来解决问题了
 * （也就是cirno_color模块可以删了）
 * 本次更新废除了大量Fragment，Adapter，Activity，以适应Compose的开发
 * 目前标记为 @Deprecated 在下下个commit统一删除
 * 本次除了对UI层大改，还优化了MainActivityViewModel，包括写了更好的刷新逻辑，
 * 以及重构了SchoolProvider实现方面的回调，让其尽量不再干涉ViewModel。。。
 * 接下来的话，我觉得需要彻底解决MainActivityViewModel中的LinkedMutableLiveData
 * 自从有了flow之后，它们便不再有必要了
 * 哈，睡觉吧，明天再接再厉~
 */